﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Projet_IMA.Habillage
{   
    public class Texture
    {
        protected int Hauteur;
        protected int Largeur;
        Couleur [,] ColorArray;
        
        protected Texture(string ff)
        {
            string s = System.IO.Path.GetFullPath("..\\..");
            string path = System.IO.Path.Combine(s,"textures",ff);
            Bitmap B = new Bitmap(path); 
            
            Hauteur = B.Height;
            Largeur = B.Width;

            ColorArray = new Couleur[Largeur,Hauteur];
            for (int x = 0 ; x < Largeur ; x ++)
                for (int y = 0 ; y < Hauteur ; y++ )
                  ColorArray[x,y] = new Couleur();
            
            for (int x = 0 ; x < Largeur ; x++)
                for (int y = 0 ; y < Hauteur ; y++)
                {
                    Color t = B.GetPixel(x,y);
                    ColorArray[x, y].R = t.R / 255.0F;
                    ColorArray[x, y].V = t.G / 255.0F;
                    ColorArray[x, y].B = t.B / 255.0F;
                }
            B.Dispose();
        }

        // private functions

        protected Couleur Interpol(float Lu, float Hv)
        {
            int x = (int)(Lu);  // plus grand entier <=
            int y = (int)(Hv);

            float cx = Lu - x; // reste
            float cy = Hv - y;

            x = x % Largeur;
            y = y % Hauteur;
            if (x < 0) x += Largeur;
            if (y < 0) y += Hauteur;

            int xpu = (x + 1) % Largeur;
            int ypu = (y + 1) % Hauteur;

            float ccx = cx * cx;
            float ccy = cy * cy;

            return
              ColorArray[x, y] * (1 - ccx) * (1 - ccy)
            + ColorArray[xpu, y] * ccx * (1 - ccy)
            + ColorArray[x, ypu] * (1 - ccx) * ccy
            + ColorArray[xpu, ypu] * ccx * ccy;
        }
    }    
}
